// ==UserScript== // @name 云展网PDF下载 YunZhanDownloader // @namespace https://github.com/lcandy2/YunZhanDownloader // @version 1.0.3 // @author lcandy2 // @description 从云展网下载PDF书籍 // @icon https://book.yunzhan365.com/favicon.ico // @match *://book.yunzhan365.com/*/*/mobile/* // @require https://unpkg.com/jspdf@2.5.1/dist/jspdf.umd.min.js // @require https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js // @run-at document-end // ==/UserScript== (function ($, jspdf) { 'use strict'; const getFliphtml5Pages = async () => { try { const scriptTag = document.querySelector('script[src*="javascript/config.js"]'); if (!scriptTag) { throw new Error("Script tag not found"); } const src = scriptTag.getAttribute("src"); const response = await fetch(src); const scriptContent = await response.text(); const configMatch = scriptContent.match(/var htmlConfig = ({.*});/); if (!configMatch || !configMatch[1]) { throw new Error("htmlConfig not found in the script"); } const configObject = JSON.parse(configMatch[1]); const fliphtml5_pages = configObject.fliphtml5_pages; return fliphtml5_pages; } catch (error) { console.error("Error:", error.message); } }; const getImageData = async (url) => { const response = await fetch(url); const blob = await response.blob(); return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = reject; reader.readAsDataURL(blob); }); }; const addDownloadBtn = (listener) => { let observer; const checkAndProcessButtonBar = () => { const $buttonBar = $("div.fbTopBar div.buttonBar"); const buttonBarAvailable = $buttonBar.length; const $shareTitle = $("div.share_form p.form_title"); const $shareCloseBtn = $("div.share_form img.close"); const $shareContent = $("div.share_form div.share_content"); const shareFormAvailable = $shareTitle.length && $shareCloseBtn.length && $shareContent.length; if (buttonBarAvailable && shareFormAvailable) { observer.disconnect(); console.log("Found buttonBar:", $buttonBar); const shareElement = $buttonBar.children().eq(8); const $element = $(`
下载
`); shareElement.html($element); $shareTitle.html("下载"); $shareCloseBtn.remove(); const downloadHtml = $(`